home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Die Speccy' 97
/
Die Speccy' 97.iso
/
amiga_system
/
the_aminet
/
comm
/
bbs
/
amms20d.lha
/
amms
/
mbbatch
/
com
/
select
< prev
next >
Wrap
Text File
|
1995-05-19
|
8KB
|
351 lines
;
; NAME : SELECT
;
; VERSION : $VER: 3.01 / 19.05.1995
;
; FUNKTION : Auswahlprogramm fuer Bretter und Filebretter
;
; AUFRUF : SELECT
;
; AUTOR : Markus Marquardt
;
; Diese Batchdatei benutzt folgende Befehle :
; -------------------------------------------
; CD
; CHECK BOARD
; CHECK FBOARD
; DISK EXECUTE
; ECHO
; EXTERN
; FILES
; GET DIR
; GOSUB
; GOTO
; IF
; MENU
; READ
; RETURN
;
; Voreinstellungen
;
SCRSTART = 1 ; Nr. 1. Zeile auf Bildschirm
SCRLINES = {APAGE}-SCRSTART+1-2 ; Anzahl Zeilen auf Bildschirm
PATHLINE = SCRLINES+1 ; Zeile fuer Pfad
STATLINE = SCRLINES+2 ; Zeile fuer Status etc.
;
; ***** Proggy *****
;
;
; Sprachabhaengige Texte einlesen
;
LANG={DEFLANGUAGE}
_check file "mbbatch:com/'{ALANGUAGE}'/select.bat" GETTEXT
LANG={ALANGUAGE}
GETTEXT:
_disk execute/keep "mbbatch:com/'LANG'/select.bat"
;
; Eigentlicher Programmstart
;
LEV=0 ; Zaehler fuer Sprung in UnterDirs
S_NEWDIR:
BN=0 ; Brettnummer auf Screen
FIRSTB=1 ; Nr. 1. Brett auf Screen
S_RESCAN:
_gosub GETDIR
_if/i FIRSTB+BN >= BANZ then BN=0 ; evtl. BN korrigieren
S_REFRESH:
_echo/nolf PATHTEXT ; Pfad ausgeben
_echo/nolf HELPTEXT ; Helpzeile ausgeben
SANZ=SCRLINES*3 ; Anzahl Bretter
_if/i FIRSTB+SANZ > BANZ then SANZ=BANZ-FIRSTB+1 ; evtl. begrenzen
SCL=SCRLINES ; Anzeigezeilen = max.
_if/i SCL > SANZ then SCL=SANZ ; evtl. begrenzen
I=BN ; BN merken
_gosub PRINTDIR
BN=I ; altes BN holen
S_LOOP:
RBN=BN+FIRSTB ; Brettnummer
_gosub SC ; Cursor setzen
S_MENU:
_menu/noecho/nopmsgs "" -
KEY_QUIT S_QUIT "^M" S_SEL "^1" S_UP "^2" S_DOWN "^3" S_LEFT "^4" S_RIGHT -
KEY_MARK S_MARK KEY_NEXT S_NEXT KEY_LAST S_LAST
; ***** Funktion BRETT WAEHLEN *****
S_SEL: ; Aktuelles Brett gewaehlt
BNAME=BNAME'RBN'
_if BTYP'RBN' == "M" then _goto S_READ ; Lesen im Brett
_if BTYP'RBN' == "F" then _goto S_FILES ; Files
; Es war ein Dir
_if BNAME == "/" then _goto S_SEL_PARENT ; wenn ParentDir, verzw.
FIRSTB'LEV'=FIRSTB ; Position im Dir merken
BN'LEV'=BN
LEV=LEV+1 ; Zaehler erhoehen
_cd "'BNAME'" ; CD auf das Dir
_goto S_NEWDIR ; -> Alles von vorne
S_SEL_PARENT: ; ParentDir angewaehlt
_cd /
_if/i LEV == 0 then _goto S_NEWDIR ; Wenn hoeher als vorher, pech
LEV=LEV-1
FIRSTB=FIRSTB'LEV' ; Alte Position holen
BN=BN'LEV'
FIRSTB'LEV'=
BN'LEV'=
_goto S_RESCAN
S_READ: ; LESEN
_echo/nolf "#reset##cls##home#"
_read "'BNAME'"
_goto S_REFRESH
S_FILES: ; FILES
_echo/nolf "#reset##cls##home#"
_files "'BNAME'"
_goto S_REFRESH
; ***** FUNKTION QUIT *****
S_QUIT: ; QUIT
_echo/nolf "#reset##cls##home#"
_eod
; ***** Funktion CURSOR HOCH *****
S_UP:
_gosub CC ; Cursor loeschen
_if/i BN == 0 then BN=SANZ ; Wenn ganz oben war, zum letzten
BN=BN-1 ; Boardnr. -1
_goto S_LOOP
; ***** Funktion CURSOR RUNTER *****
S_DOWN: ; Cursor nach unten
_gosub CC ; Cursor loeschen
_if/i BN == SANZ-1 then BN=-1 ; Wenn ganz untern, zum 1.
BN=BN+1
_goto S_LOOP
; ***** Funktion CURSOR LINKS *****
S_LEFT: ; Cursor nach links
_gosub CC ; Cursor loeschen
_if/i BN-SCL < 0 then BN=BN+SANZ/(SCL+1)*SCL-(BN+1+SANZ/(SCL+1)*SCL)/(SANZ+1)*SCL+SCL
BN=BN-SCL ; neue Brettnummer
_goto S_LOOP
; ***** Funktion CURSOR RECHTS *****
S_RIGHT: ; Cursor nach rechts
_gosub CC ; Cursor loeschen
_if/i BN+SCL >= SANZ then BN=BN%SCL-SCL
BN=BN+SCL
_goto S_LOOP
; ***** Funktion SEITE VOR *****
S_NEXT:
_if/i FIRSTB+SCRLINES*3 > BANZ then _goto S_MENU ; Wenn nix mehr da, nix
FIRSTB=FIRSTB+SCRLINES*3 ; Nummer 1. Brett hochsetzen
_if/i FIRSTB+SCRLINES*3 > BANZ then FIRSTB=BANZ-SCRLINES*3+1 ; Evtl. begr.
_goto S_REFRESH ; und neu aufbauen alles
; ***** Funktion SEITE ZURUECK *****
S_LAST:
_if/i FIRSTB == 1 then _goto S_MENU ; Wenn schon auf 1. nix machen
FIRSTB=FIRSTB-SCRLINES*3
_if/i FIRSTB < 1 then FIRSTB=1 ; Evtl. begrenzen
_goto S_REFRESH ; und neu aufbauen alles
; ***** Funktion MARK *****
S_MARK:
BNAME=BNAME'RBN'
_if BTYP'RBN' == "D" then _goto S_MARK_DIR ; wenn Dir, verzw.
_gosub CC ; Cursor loeschen
_if BTYP'RBN' == "M" then MARKCOM="_read" ; Wenn MsgBrett, dann mit Read
_if BTYP'RBN' == "F" then MARKCOM="_files" ; Wenn FileBrett dann mit Files
_if BMRK'RBN' == "*" then _goto S_MARK_WECH ; Wenn schon markiert, entmarkieren
I=1+8 ; Markieren
BMRK'RBN'="*"
_echo/nolf " *" ; * ausgeben
_goto S_MARK_YO
S_MARK_WECH:
I=2+8 ; Entmarkieren
BMRK'RBN'=" "
_echo/nolf " " ; * loeschen
S_MARK_YO:
'MARKCOM'/action='i' "'BNAME'" ; Read/Files mit /action=x aufrufen
_goto S_LOOP
S_MARK_DIR:
_if BNAME == "/" then _goto S_MENU ; Wenn /, keine Reaktion
_cd "'BNAME'" ; In Dir gehen
_menu/noecho/nopmsgs MARKMENU -
KEY_MARKDIR S_MARK_DIRM KEY_UNMARKDIR S_MARK_DIRU KEY_ABORT S_MARK_DIRA
S_MARK_DIRM:
I=1+8 ; Wert /Action
_gosub MB ; Alles markieren
_goto S_MARK_DIRA ; und Ende
S_MARK_DIRU:
I=2+8 ; Wert /Action
_gosub MB ; Alles entmarkieren
S_MARK_DIRA:
_cd / ; Ins Parent-Dir zurueck
_echo/nolf HELPTEXT ; Helpzeile ausgeben
_goto S_LOOP ; und zurueck
;
;-----------------------------------------------------------------------------
; SC : Cursor auf Position fuer Brett BN setzen und ausgeben.
;
SC:
SC_L=BN%SCRLINES+SCRSTART ; Zeilennr.
SC_C=BN/SCRLINES*26+1 ; Spaltennummer
_echo/nolf "#setpos 'SC_L','SC_C'#>#left#"
_return
;
;-----------------------------------------------------------------------------
; CC : Cursor auf Position fuer Brett BN setzen und loeschen
;
CC:
SC_L=BN%SCRLINES+SCRSTART ; Zeilennr.
SC_C=BN/SCRLINES*26+1 ; Spaltennummer
_echo/nolf "#setpos 'SC_L','SC_C'# "
_return
;
;-----------------------------------------------------------------------------
; PRINTDIR : Ausgeben des aktuellen Directory-Inhaltes.
;
; Die Namen/Typen der Bretter muessen in den Variablen
; BNAME1...BNAMEn und BTYP1...BTYPn stehen, BANZ muss
; die Anzahl der Bretter enthalten.
;
PRINTDIR:
BN=0 ; Aktuelle Brettnummer
RBN=FIRSTB ; Variablennummer
PRINTDIR_LOOP:
_if/i RBN > BANZ then _return
_if/i BN == SANZ then _return
_gosub CC ; Cursor setzen
STR=BNAME'RBN'
MRK=BMRK'RBN'
_if BTYP'RBN' == "M" then STR=" 'MRK' #vfarbe 2#'STR'#reset#"
_if BTYP'RBN' == "F" then STR=" 'MRK' #vfarbe 6#'STR'#reset#"
_if BTYP'RBN' == "D" then STR=" 'MRK' #vfarbe 1#'STR'#reset#"
_echo/nolf STR ; Brettname ausgeben
BN=BN+1 ; Zaehler +1
RBN=RBN+1
_goto PRINTDIR_LOOP ; Weiter
;
;-----------------------------------------------------------------------------
; GETDIR : Auslesen des aktuellen Directories
;
; Es werden die Variablen BNAME1...BNAMEn (Name des entspr.
; Brettes) und BTYP1...BTYPn (Typ des Brettes, M = Msg, F = File
; und D = Dir) gesetzt. In BANZ wird die Anzahl der Bretter
; gesetzt.
;
GETDIR:
BANZ=0 ; Anzahl auf 0
; Nach UnterDirs im Dir suchen
BNAME="" ; Aktueller Boardname
_if {cdpath} == ":" then _goto GETDIR_DLOOP
BANZ=BANZ+1 ; 1. Eintrag = Parent
BNAME1="/"
BTYP1="D"
BMRK1=" "
GETDIR_DLOOP:
_get dir/dirs "'BNAME'" BNAME ; Naechsten Eintrag holen
_if BNAME == "" then _goto GETDIR_M ; Wenn Leer -> MsgBoards suchen
BANZ=BANZ+1 ; Brettanzahl erhoehen
BNAME'BANZ'="'BNAME'/" ; Name in Variable BNAMEn
BTYP'BANZ'="D" ; Typ auf Directory
BMRK'BANZ'=" " ; auf nicht markiert
_goto GETDIR_DLOOP
; Nach MsgBrettern im Dir suchen
GETDIR_M:
BNAME="" ; Aktueller Boardname
GETDIR_MLOOP:
_get dir/boards "'BNAME'" BNAME ; Naechsten Eintrag holen
_if BNAME == "" then _goto GETDIR_F ; Wenn Leer -> nach FileBoards suchen
BANZ=BANZ+1 ; Brettanzahl erhoehen
BNAME'BANZ'=BNAME ; Name in Variable BNAMEn
BTYP'BANZ'="M" ; Typ auf MsgBrett
BMRK'BANZ'=" " ; auf nicht markiert
_check board/boardlist "'BNAME'" GETDIR_MLOOP ; markiert ?
BMRK'BANZ'="*" ; auf markiert
_goto GETDIR_MLOOP
; Nach FileBrettern im Dir suchen
GETDIR_F:
BNAME="" ; Aktueller Boardname
GETDIR_FLOOP:
_get dir/fboards "'BNAME'" BNAME ; Naechsten Eintrag holen
_if BNAME == "" then _return ; Wenn Leer -> Ende
BANZ=BANZ+1 ; Brettanzahl erhoehen
BNAME'BANZ'=BNAME ; Name in Variable BNAMEn
BTYP'BANZ'="F" ; Typ auf FileBrett
BMRK'BANZ'=" " ; Auf nicht markiert
_check fboard/boardlist "'BNAME'" GETDIR_FLOOP ; markiert ?
BMRK'BANZ'="*" ; Auf markiert
_goto GETDIR_FLOOP
;
;-----------------------------------------------------------------------------
; MB : Rekursives (ent)Markieren von Brettern, auch in Unterdirs
; In der Variable I wird der Wert fuer Force uebergeben !
;
MB:
_read/action='I' *
_files/action='I' *
_return